<?php

// 栏目 分类

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use DB;
use Session;

class CategoryController extends Controller
{
    
	
	// 列表 页
	public function index( Request $request )
	{
	
		// 获取路由
		$route_array = request()->route()->getAction();
		$controller = explode("\\",$route_array['controller']);
		$result = explode("@",$controller[3]);
		// 控制器 	$result[0];
		// 方法 	$result[1];
		$auth_final = '';
		foreach( Session::get('auths') as $key=> $auth_info )
		{
			// 符合条件
			if( $auth_info['controller']==$result[0] && $auth_info['func']==$result[1] )
			{
				$auth_final = true;
				break;
			}else
			{
				$auth_final = false;
			}
		} 
		// 权限验证失败
		if( !$auth_final )
		{
			return back()->with( ['authinfo'=>'没有此项权限'] );
		}
	
		// 获取搜索内容
		$keyword = $request->input('keyword',"");
		if( empty($keyword) )
		{
			// 为空 说明没有搜索
			$one = 'id';
			$two = '!=';
			$three = '0';
		}else
		{
			// 是分类名
			$one = 'name';
			$two = 'like';
			$three = '%'.$keyword.'%';
		}
		
		// 查询所有分类 每页30条数据
		$category = DB::table('category')
					-> where( $one,$two,$three ) 
					// 原生sql
					-> orderBy( DB::raw("concat( path,id,'-' )") ) 
					// 每页30条
					-> paginate(30);
		// 空格数组
		$blank = array();
		foreach( $category as $key=>$category_info )
		{
			// 数出有几个 '-'
			$num=substr_count( $category_info->path,'-' );
			if( ($num-1)>0 )
			{
				// 分类的空格 便于展示层级关系
				$blank[$key] = str_repeat("&nbsp;",($num-1)*6) .'|--';
			}
		}
		
		// 列表页
		return view( 'category.list',[ 'category'=>$category,'blank'=>$blank,'request'=>$keyword ] );
		
	}
	
	
	// 获取所有一级分类 
	// 写成公共的方法 方便调用
	public static function getFirstAll()
	{
		$all_first_category = DB::table('category')
							// 0 一级
							-> where('pid','=','0')
							-> orderBy('sort','desc')
							-> get();
		return $all_first_category;
	}
	
	
	// 用于 分类 编辑
	public static function getPath( $category_id='' )
	{
		// 分类信息
		$category_info = DB::table('category')
					-> select('path')
					-> where( 'id','=',$category_id )
					-> first();
		// 拼一个完整的path
		$category_info->path .= $category_id;
		// 转换成数组
		$category_arr=explode( '-',$category_info->path );
		// 清除无效值
		unset( $category_arr[0] );	
		$category_path = array();
		foreach( $category_arr as $key=>$category_id )
		{
			$cate_info = DB::table('category')
							-> where( 'id','=',$category_id )
							-> first();
			// 分类的 id 与 分类名
			$category_path[$key]['category_name'] = $cate_info->name;
			$category_path[$key]['id'] = $cate_info->id;
		}
		return $category_path;
	}
	
	
	
	// 添加 编辑 
	public function add( $category_id='' )
	{
	
		// 获取路由
		$route_array = request()->route()->getAction();
		$controller = explode("\\",$route_array['controller']);
		$result = explode("@",$controller[3]);
		// 控制器 	$result[0];
		// 方法 	$result[1];
		$auth_final = '';
		foreach( Session::get('auths') as $key=> $auth_info )
		{
			// 符合条件
			if( $auth_info['controller']==$result[0] && $auth_info['func']==$result[1] )
			{
				$auth_final = true;
				break;
			}else
			{
				$auth_final = false;
			}
		} 
		// 权限验证失败
		if( !$auth_final )
		{
			return back()->with( ['authinfo'=>'没有此项权限'] );
		}
		
		// 获取所有一级分类
		$all_first_category = $this::getFirstAll();
		
		if( $category_id=='' )
		{
			// 创建
			return view('category.add',['all_first_category'=>$all_first_category]);
		}else
		{
			// 编辑
			// 要编辑的 栏目信息
			$categoryInfo = DB::table('category')
						-> where('id','=',$category_id)
						-> first();
			// 栏目 完整路径
			$category_path = $this::getPath( $category_id );	
			// 编辑页面
			return view("category.add",['all_first_category'=>$all_first_category,'category_path'=>$category_path,'categoryInfo'=>$categoryInfo ] );
		}
		
	}
	
	// 用于 栏目 创建 编辑
	// 获取 父类 相对应的 子类
	public function getSonCategory( Request $request )
	{
		$data = $request -> except('_token');
		// 页面当前选择的分类 被称为 父类id
		$category_id = $data['category_id'];			
		// 为新select设置 新的id值
		$new_id		 = $data['new_id'];				
		
		// 获取到子类
		$son_category = DB::table('category')
					-> where('pid','=',$category_id )
					-> get();
		
		// 准备要进行返回的html
		$html="";

		$total = count($son_category) - 1 ;
		foreach( $son_category as $key=>$category_info ){
			// 第一次加头部
			if( $key == 0 )
			{
				$html ="<select name='{$new_id}' class='form-control' id='{$new_id}' style='width:auto;float:left;margin-left:9px;' onchange=\"getSonCategory('".$new_id."')\" >";
				$html.="<option value='-1' >当前分类下</option>";
				$html .= "<option value='".$category_info->id."' >".$category_info->name."</option>";
				
			}
			// 最后一次加尾部
			else if( $key == $total )
			{
				$html .= "<option value='".$category_info->id."' >".$category_info->name."</option>";
				$html .= "</select>";
			}
			// 加中间部分
			else
			{
				$html .= "<option value='".$category_info->id."' >".$category_info->name."</option>";
			}
		}
			
		exit($html);
	}
	
	// 执行 添加 编辑
	public function doAdd( Request $request )
	{
		$data = $request -> except('_token');
		// 分类id
		$categoryId = $data['categoryId'];
		// 清除无效值 下标0的值是 null
		unset($data['category'][0],$data['categoryId']);
		if( $categoryId=='add' )
		{
			// 添加
			// 0 代表要创建根类 
			if( $data['category'][1]=='0' )
			{		
				$data['pid'] = "0";
				$data['path'] = "0-";
			}else
			{
				$path='';
				foreach( $data['category'] as $key=>$category_id )
				{
					if( $category_id != '-1' )
					{
						// path
						$path.=$category_id.'-';
						// 取循环的最后一次 就是父ID
						$data['pid']=$category_id;
					}
				}
				$data['path']='0-'.$path;
			}
		}
		
		// 分类名称 验证 
		$name_length=mb_strlen( $data['name'],'utf-8' );
		if( $name_length<1 )
		{
			$this->ajAxReturn('栏目名称不能为空');
		}
		
		if( empty($data['title']) )
		{
			// $this->ajAxReturn('标题不能为空');
		}
		
		if( empty($data['keywords']) )
		{
			// $this->ajAxReturn('关键词不能为空');
		}
		
		if( empty($data['desc']) )
		{
			// $this->ajAxReturn('描述不能为空');
		}
		unset($data['category']);
		if( $categoryId=='add' )
		{
			// 创建
			$data['create_at'] = date("Y-m-d H:i:s",time());
			$data['admin_id'] = Session::get('admin_id');
			$insert_id = DB::table('category')->insertGetId($data);
			if( $insert_id )
			{
				$this->ajAxReturn('栏目创建成功');
			}
			
			$this->ajAxReturn('创建失败');
			
		}else
		{
			
			// 编辑 
			$res = DB::table('category')
					-> where('id','=',$categoryId)
					-> update($data);
			if( $res )
			{
				$this->ajAxReturn('修改成功');
			}
			
			$this->ajAxReturn('无任何修改,编辑失败');
			
			
		}
	}
	
	
	
}
